/********************************************
 * 功能说明: 
 * 模块名称: 
 * 系统名称: 
 * 软件版权: 北京银杉金服科技有限公司
 * 系统版本: 1.0.0
 * 开发人员: zhangfb
 * 开发时间: 2018/9/15 0:58
 * 审核人员: 
 * 相关文档: 
 * 修改记录: 修改日期 修改人员 修改说明
 *********************************************/
package com.hyacinth.service.impl;

import com.hyacinth.constant.ErrorCodeEnum;
import com.hyacinth.constant.IDict;
import com.hyacinth.dto.SystemDto;
import com.hyacinth.entity.System;
import com.hyacinth.exception.BusinessException;
import com.hyacinth.repository.jpa.SystemRepository;
import com.hyacinth.service.SystemService;
import com.hyacinth.util.BeanUtils;
import com.hyacinth.util.JsonMapper;
import com.hyacinth.util.generator.CodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;

/**
 * 系统服务层
 * @author zhangfb
 * @version 1.0.0.1
 * @since JDK 1.8
 */
@Slf4j
@Service
@Transactional
public class SystemServiceImpl implements SystemService {

    private final SystemRepository systemRepository;

    @Autowired
    public SystemServiceImpl(SystemRepository systemRepository) {
        this.systemRepository = systemRepository;
    }

    @Override
    public System findSystemByName(String sysName) {
        return systemRepository.findByName(sysName);
    }

    @Override
    public System save(SystemDto sysDto) {
        System system = findSystemByName(sysDto.name);
        if (system != null) {
            if (!IDict.dataFlag_OK.equals(system.getDataFlag())) {
                log.info("系统信息已存在，已将删除状态改为正常状态，系统名称={}",system.getName());
                system.setDataFlag(IDict.dataFlag_OK);
                return systemRepository.save(system);
            }
            if (!IDict.useFlag_USERED.equals(system.getSysFlag())) {
                throw new BusinessException(ErrorCodeEnum.GL99990005, system.getSysFlag());
            }
            throw new BusinessException(ErrorCodeEnum.GL99990006);
        }
        system = new System();
        system.setCode(CodeUtils.getCode(System.class));
        try {
            BeanUtils.copyAllProperties(sysDto, system);
        } catch (Exception e) {
            throw new BusinessException(ErrorCodeEnum.GL99990004, JsonMapper.toJsonString(sysDto),JsonMapper.toJsonString(system));
        }
        return systemRepository.save(system);
    }


}
